//
//  Singleton.m
//  4-8-单立
//
//  Created by dllo on 15/4/8.
//  Copyright (c) 2015年 dllo. All rights reserved.
//

#import "Singleton.h"

// 单例是一个普通的类， 既可以是试图控制器，也可以试试图，也可以是model,所有的类都可以转换成单例类

// 内存唯一：因此对象是存储在静态区
// 不能release,不能dealloc

static Singleton *single = nil;

@implementation Singleton

// 在现有学习中：NSFileManager,NSBundle,UIApplication,UIDevice,NSUserDefaults,UIScreen的单例方法

// 为了保证内存是唯一的，也就是调用下面的类方法的时候，不能多次创建这个类的对象，因此需要判断：如果创建过对象，则不再创建，如果没有创建过，则创建

+ (Singleton *)shareInterface
{
//    //系统提供的单例方法
//    [NSFileManager defaultManager];
//    [NSBundle mainBundle];
//    [UIApplication sharedApplication];
//    [UIDevice currentDevice];
//    [NSUserDefaults standardUserDefaults];
//    [UIScreen mainScreen];
    
//    //第一种:为了防止在同一时间调用两次，则加一个线程安全判断，即：第一次调用的时候，会把会把后面的代码锁定，不让后面的代码进入，等到创建完成以后再进入来判断
//   // 单例安全: @synchronized(self)
//    @synchronized(self){
//        if (!single) {
//            single = [[Singleton alloc] init];
//            single.array = [NSMutableArray array];
//        }
//    }
    
    
    // 第二种：block
    static dispatch_once_t once;
    
    dispatch_once(&once,^{
        if (!single) {
            single = [[Singleton alloc] init];
            single.array = [NSMutableArray array];
        }
    });
    return single;
}








@end
